package strtrans

import (
	"fmt"
	"strconv"
)
// ToString 将整数、浮点数、布尔值和字节转换为字符串。
// 其中浮点数指双精度浮点数，将保留原有小数位数。
// 如果输入不是基本类型，则返回空串
func ToString(value interface{}) string {
	switch v := value.(type) {
	case int, int8, int16, int64:
		return fmt.Sprintf("%d", v) // 有符号整数
	case uint, uint16, uint32, uint64:
		return fmt.Sprintf("%d", v) // 无符号整数
	case float64:
		return strconv.FormatFloat(v, 'f', -1, 64)
	case bool:
		return fmt.Sprintf("%t", v)
	case byte: // 等同于 uint8，处理英文字符
		return fmt.Sprintf("%c", v)
	case rune: // 等同于 int32，处理非英文字符
		return fmt.Sprintf("%c", v)
	}
	return ""
}

// Float32ToStr 将单精度浮点数转换为字符串，需要指定保留位数。
// 当指定位数为-1时，返回空串(因为会显示所有位数)
func Float32ToStr(value float32, bit int) string {
	if bit == -1 {
		fmt.Println("保留位数不能为-1！")
		return ""
	}
	return strconv.FormatFloat(float64(value), 'f', bit, 64)
}

// ToInt 将字符串转换为十进制int类型。
func ToInt(value string) (int, error) {
	return strconv.Atoi(value)
}

// ToFloat 将字符串转换为float64类型，支持整数和浮点数字符串。
func ToFloat(value string) (float64, error) {
	return strconv.ParseFloat(value, 64)
}

// ToBool 将字符串转换为bool类型。
func ToBool(value string) (bool, error) {
	return strconv.ParseBool(value)
}
